'use strict'

const http = require('http')

let html = `
  <!DOCTYPE html>
  <html>
    <head>
      <title>First Server</title>
    </head>
    <body>
      <div>Node.js in service.</div>
    </body>
  </html>
`

let routerTable = {

  '/' : async (request, response) => {
      response.setHeader('content-type',
                'text/html; charset=utf-8')

      response.end(html)
  },

  '/x/y' : async (request, response) => {
    response.end('-- ok --')
  },

  '/x/y/z' : async (request, response) => {
      let bufferList = []
      let totalLength = 0
      
      request.on('data', chunk => {
        totalLength += chunk.length
        bufferList.push(chunk)
      })
    
      let bodyData = null
    
      request.on('end', () => {
          if (bufferList.length > 0)
              bodyData = Buffer.concat(bufferList, totalLength);
    
          bufferList = [];
    
          if (bodyData) {
            response.setHeader('content-type',
                                'text/plain; charset=utf-8')
                                
            response.end(bodyData)
          } else {
            response.end()
          }
      })

  }

}


let serv = http.createServer()

serv.on('request', (request, response) => {

  if (routerTable[ request.url ] === undefined) {
    response.statusCode = 404
    response.end('page not found')
    return
  }

  routerTable[ request.url ](request, response)

})

serv.listen(3456)
